package com.opensms.eventLogFacade;

import java.util.Collection;

import com.opensms.eventLogFacade.actions.AddEventLogAction;
import com.opensms.eventLogFacade.actions.FindByIdEventLogAction;
import com.opensms.eventLogFacade.actions.FindByTypeEventLogAction;
import com.opensms.eventLogFacade.vo.EventLogVO;
import com.util.exceptions.InstanceNotFoundException;
import com.util.exceptions.InternalErrorException;
import com.util.exceptions.ModelException;
import com.util.sql.PlainActionProcessor;

/**
 * Fachada de acceso a las operaciones sobre el log de eventos
 * de envio y recepcion de SMS
 * Graba/Lee de la tabla LogEventos
 * 
 * version 1.0
 */
public class EventLogFacade {

	/**
	 * Inserta un nuevo evento en la tabla de eventos
	 *  
	 * @param vo a insertar
	 * @return vo con la clave actualizada
	 * @throws InternalErrorException
	 */
	public EventLogVO createEventLog(EventLogVO vo) 
		throws InternalErrorException{
        
		try {
			AddEventLogAction action = new AddEventLogAction(vo);
			EventLogVO rdo = (EventLogVO) PlainActionProcessor.process(action);
			return rdo;
		} catch (ModelException e) {
			throw new InternalErrorException(e);
		} catch (InternalErrorException e) {
			throw e;
		}        
	}
	
	/**
	 * Busca un evento por su clave
	 * @param id
	 * @return
	 * @throws InternalErrorException
	 * @throws InstanceNotFoundException
	 */
	public EventLogVO findByIdEventLog(long id) 
		throws InternalErrorException, InstanceNotFoundException{
    
		try {
			FindByIdEventLogAction action = new FindByIdEventLogAction(id);
			EventLogVO rdo = (EventLogVO) PlainActionProcessor.process(action);
			return rdo;
		} catch (ModelException e) {
			throw new InternalErrorException(e);
		} catch (InternalErrorException e) {
			throw e;
		}   
	}

	/**
	 * Busca eventos por su tipo: Envio/Recepcion
	 * 
	 * @param type
	 * @return Colleccion de eventos ordenados por fecha. Si no hay eventos que cumplan los criterios de busqueda devuelve coleccion vacia
	 * @throws InternalErrorException
	 */
	public Collection findByTypeEventLog(char type) 
		throws InternalErrorException{
    
		try {
			FindByTypeEventLogAction action = new FindByTypeEventLogAction(type);
			Collection rdo = (Collection) PlainActionProcessor.process(action);
			return rdo;
		} catch (ModelException e) {
			throw new InternalErrorException(e);
		} catch (InternalErrorException e) {
			throw e;
		}    
	}

}
